home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / comm / misc / ClipWatch.lha / ClipWatch / Sources / ClipWatch.c < prev    next >
C/C++ Source or Header  |  2000-12-29  |  52KB  |  1,925 lines

  1. /*
  2.      CLIPWATCH
  3.      LECTURE DES INFORMATIONS DES TELETRANS CLIP / FORCE (Constructeur WIT)
  4.      http://www.wit.fr
  5.  
  6.      Marc Le Douarain , Décembre 1998
  7.      mavati@club-internet.fr
  8.      http://perso.club-internet.fr/mavati
  9.      http://www.multimania.com/mavati
  10.      "Conçu" (sur papier) en partie à la résidence des jeunes, St Nazaire.
  11.  
  12.      Dernière mise à jour : 29 décembre 2000
  13.  
  14.  
  15.  Note : modifs à faire dans ClipWatch_gui.c après génération par MUIBuilder
  16.    -Ligne 10 : NON!!!!!!!//#include "ClipWatch_GuiExtern.h"
  17.    -Ligne 307: Object->ListEtats    =>   MUIA_List_Title,TRUE,
  18.    -Ligne 324: Object->ListJournal  =>   MUIA_List_Title,TRUE,
  19.    -Ligne 829: Object->App          =>   MUIA_Application_Version, "$VER:ClipW..... _DATE,
  20.    -Ligne 873: 'MUIV_EveryTime'     =>   2      (Page 2, pour l'Object->ListJournal)
  21.    -Ligne 880: 'MUIV_EveryTime'     =>   1      (Page 1, pour l'Object->ListEtats)
  22.    -Ligne 447: rajouter :    Child, Object->GraphTrace,
  23.    -Ligne 435: rajouter :  Object->GraphTrace = NewObject(mccgraph->mcc_Class,NULL,
  24.                                TextFrame,
  25.                                MUIA_Background, MUII_BACKGROUND,
  26.                                TAG_DONE),
  27.   Rajouter une ligne avec   APTR GraphTrace   dans ClipWatch_gui.h
  28.  
  29.  
  30. */
  31.  
  32. /* Generate the MUI Graphical User Interface */
  33. /* (stdio is faster for tests...!) */
  34. #define GENERATE_GUI
  35.  
  36. /* We are under developpement... */
  37. // #define DEBUG
  38.  
  39. #include <exec/types.h>
  40. #include <devices/serial.h>
  41. #include <dos/dos.h>
  42. #include <stdio.h>
  43. #include <stdlib.h>
  44. #include <string.h>
  45. #include <time.h>
  46. #include <clib/alib_protos.h>
  47. #include <clib/dos_protos.h>
  48. #include <clib/exec_protos.h>
  49. #include <clib/intuition_protos.h>
  50.  
  51.  
  52.  
  53. #define VERSION "0.8.2"
  54. #define COMPILATION_DATE __DATE__
  55.  
  56. #include "trsii.h"
  57. #ifdef GENERATE_GUI
  58. #include "MUI_demo.h"
  59. #endif
  60.  
  61. int TeletransOnLine=FALSE;
  62. int TeletransOnCall=FALSE;
  63. struct InfosTeletrans Teletrans;
  64. struct Ressources * Ress;
  65. int RefreshType;
  66. int RefreshParam;
  67. char * MessagesBox[NBR_MESSAGESBOX];
  68. char * MessagesBoxMemZone;
  69. struct Traces Tra[NBR_TRACES];
  70. char * TabLibellesTraces[NBR_TRACES]; /* Only for the init of the cycle gadget of MUI */
  71. struct Evenements * Jrnl;
  72. int JrnlTaille=0;
  73. char Even_Journal[256];
  74. long NumLastEven_Journal;
  75. char Param_Trace[256];
  76. char DateLastEven_Journal[20];
  77. struct Str_AffiTraceGraph TraceGraph;
  78. //time_t * TraHorodates=NULL;
  79. //double * TraValeurs=NULL;
  80. //long TraNbrSamples=0;
  81. //time_t TraTime32Deb,TraTime32Fin;
  82. struct Str_AffiGraphGene AffiGraphGene;
  83.  
  84. long MoniteurMode=1;
  85. #ifndef DEBUG
  86. long MoniteurActif=FALSE;
  87. long RecupDesMessages=TRUE;
  88. #else
  89. long MoniteurActif=TRUE;
  90. long RecupDesMessages=FALSE;
  91. #endif
  92. long RecupDuJournal=FALSE; 
  93. long RecupDesTraces=TRUE;
  94. char * ListeSitesConnus=NULL;
  95.  
  96. char * TrameRecue;
  97.  
  98. char SerialDevice[50]="serial.device";
  99. int SerialUnit=0;
  100. int SerialSpeed=1200;
  101.  
  102. int SerialInitOk=FALSE;    /* Flag set if the serial device is open. */
  103.  
  104. struct MsgPort *SerialMP = NULL;    /* Port for replies to io messages to go to. */
  105. struct IOExtSer *SerialIO = NULL;    /* Data structure used for messages to device. */
  106. struct IOExtSer *IncomingIO = NULL;    /* Structure for incoming characters. */
  107.  
  108. /* with GCC without libnix (-noixemul) */
  109. struct Library *IntuitionBase = NULL;
  110. struct Library *GfxBase = NULL;
  111. struct Library *UtilityBase = NULL;
  112.  
  113. #ifdef GENERATE_GUI
  114. struct ObjApp * App = NULL;
  115. static APTR WI_AboutMUI;
  116. struct MUI_CustomClass *mccgraph;
  117. #endif
  118.  
  119. void ErrorMessageRequest(char *string);
  120. void DisplayStatus(char *string);
  121. void convert_long_to_asciidate(time_t tps,char * ch,char * ch_time);
  122.  
  123. #ifdef GENERATE_GUI
  124. #include "GraphClass.c"
  125. #include "ClipWatch_Gui.c"
  126. #endif
  127.  
  128. #include "strings.c"
  129. #include "serial-modem.c"
  130. #include "trsii.c"
  131. #include "misc.c"
  132.  
  133.  
  134.  
  135. void DisplayStatus(char *string)
  136. {
  137.  #ifndef GENERATE_GUI
  138.  printf("%s\n",string);
  139.  #else
  140.  set(App->ComState,MUIA_Text_Contents,string);
  141.  #endif
  142. }
  143.  
  144. void ErrorMessageRequest(char *string)
  145. {
  146.  #ifndef GENERATE_GUI
  147.  printf("%s\n",string);
  148.  #else
  149.  MUI_Request(App->App, App->WI_Main, 0, NULL, "OK", string);
  150.  DisplayStatus(""); 
  151.  #endif
  152. }
  153.  
  154. /* ################################################ */
  155. /* Ajout d'un événement dans le Journal (structure) */
  156. /* ################################################ */
  157. int AddEvenInJrnl(char * Even,int RefreshList)
  158. {
  159.  char * EvenOffset;
  160.  int Ok=FALSE;
  161.  int i;
  162.  int NewMemAlloc=FALSE;
  163. // long ActiveEntryInJrnl;
  164.  
  165.  JrnlTaille++;
  166.  // On alloue 100 evens par 100 evens pour limiter le nbr de reconstruction de la liste...
  167.  if ( (((JrnlTaille-1)%100)==0) || (Jrnl==NULL) )
  168.  {
  169.   Jrnl=(struct Evenements *)realloc(Jrnl,(JrnlTaille+100)*sizeof(struct Evenements));
  170.   if (Jrnl==NULL)
  171.   {
  172.    ErrorMessageRequest("Could not alloc enough memory (for evenements)");
  173.    Appli_CloseAll();
  174.    exit(30);
  175.   }
  176.   else
  177.   {
  178.    NewMemAlloc=TRUE;
  179.   }
  180.  }
  181.  if (Jrnl)
  182.  {
  183.   strcpy_termnotnull(Jrnl[JrnlTaille-1].Index,Even,9,0);
  184.   sprintf(Jrnl[JrnlTaille-1].Date,"%c%c/%c%c/%c%c%c%c %c%c:%c%c:%c%c",Even[11],Even[12],Even[9],Even[10],Even[5],Even[6],Even[7],Even[8],Even[13],Even[14],Even[15],Even[16],Even[17],Even[18]);
  185.   EvenOffset=str_field(Even,128,5,9);
  186.   if (EvenOffset)
  187.    strcpy_termnotnull(Jrnl[JrnlTaille-1].NumRess,EvenOffset,9,0);
  188.   EvenOffset=str_field(Even,128,6,9);
  189.   if (EvenOffset)
  190.    strcpy_termnotnull(Jrnl[JrnlTaille-1].LibelleRess,EvenOffset,9,0);
  191.   EvenOffset=str_field(Even,128,8,9);
  192.   if (EvenOffset)
  193.    strcpy_termnotnull(Jrnl[JrnlTaille-1].EtatRess,EvenOffset,9,0);
  194.   EvenOffset=str_field(Even,128,9,9);
  195.   if (EvenOffset)
  196.   {
  197.    Jrnl[JrnlTaille-1].Classe[0]=EvenOffset[1];
  198.    Jrnl[JrnlTaille-1].Classe[1]='\0';
  199.    Jrnl[JrnlTaille-1].Zone[0]=EvenOffset[4];
  200.    Jrnl[JrnlTaille-1].Zone[1]='\0';
  201.    Jrnl[JrnlTaille-1].Code[0]=EvenOffset[7];
  202.    Jrnl[JrnlTaille-1].Code[1]='\0';
  203.    Ok=TRUE;
  204.    #ifdef GENERATE_GUI
  205.    if (NewMemAlloc)
  206.    {
  207.     /* Comme il y a eu un REALLOC, il faut tout recréer la liste : pointeurs vers
  208.        chaines plus valides */
  209. //    get(App->ListJournal,MUIA_List_Active,&ActiveEntryInJrnl);
  210.     if (RefreshList)
  211.      set(App->ListJournal,MUIA_List_Quiet,TRUE);
  212.     DoMethod(App->ListJournal,MUIM_List_Clear);
  213.     for(i=0;i<JrnlTaille;i++)
  214.     {
  215.      DoMethod(App->ListJournal,MUIM_List_InsertSingle,&Jrnl[i],MUIV_List_Insert_Bottom);
  216.     }
  217.     if (RefreshList)
  218.      set(App->ListJournal,MUIA_List_Quiet,FALSE);
  219. //    if (ActiveEntryInJrnl>-1)
  220. //    set(App->ListJournal,MUIA_List_Active,ActiveEntryInJrnl);
  221.    }
  222.    else
  223.    {
  224.     DoMethod(App->ListJournal,MUIM_List_InsertSingle,&Jrnl[JrnlTaille-1],MUIV_List_Insert_Bottom);
  225.    }
  226.    if (RefreshList)
  227.     set(App->ListJournal,MUIA_List_Active,MUIV_List_Active_Bottom);
  228.    #endif
  229.   }
  230.  }
  231.  return Ok;
  232. }
  233.  
  234. /* ######################################################################### */
  235. /* Génération du gadget MUI Cycle, contenant la liste des traces disponibles */
  236. /* ######################################################################### */
  237. #ifdef GENERATE_GUI
  238. void UpdateMUICycleTraces(void)
  239. {
  240.  int i,j=0;
  241.  for (i=1;i<NBR_TRACES;i++)
  242.  {
  243.   /* Trace paramétrée ? (pour affichage dans gadget Cycle MUI) */
  244.   if(Tra[i].Used=='M')
  245.   {
  246.    TabLibellesTraces[j]=Tra[i].NumMenu;
  247.    j++;
  248.   }
  249.  }
  250.  /* Dernière entrée de la liste de pointeurs : NULL */
  251.  TabLibellesTraces[j]=NULL; 
  252.  set(App->ChoixTraces,MUIA_Cycle_Entries,TabLibellesTraces);
  253.  set(App->ChoixTraces,MUIA_Cycle_Active,0);
  254. }
  255.  
  256. /* Renvoie le numéro de la ligne sélectionnée qui servira à se positionner
  257.    dans un gadget Cycle selon la chaine désirée */
  258. /* En entrée : tableau de pointeurs de chaines du cycle */
  259. /*           : pointeur sur la chaine recherchée */
  260. int GetMUICycleToSet(char ** CycleDataPtr,char * Wanted)
  261. {
  262.  int num=0;
  263.  int Fnd=FALSE;
  264.  char * ptchaine;
  265.  do
  266.  {
  267.   ptchaine=CycleDataPtr[num];
  268.   if (strcmp(ptchaine,Wanted)==0)
  269.    Fnd=TRUE;
  270.   if (!Fnd)
  271.   {
  272.    num++;
  273.   }
  274.  }
  275.  while( (*ptchaine!=NULL) && (!Fnd) );
  276.  if (!Fnd)
  277.   num=0;
  278.  return num;
  279. }
  280. /* Renvoie un pointeur sur le contenu du gadget Cycle sélectionné */
  281. /* En entrée : tableau de pointeurs de chaines du cycle */
  282. /*           : entier sur la sélection du cycle */
  283. char * GetMUICycleString(char ** CycleDataPtr, int NumCycleSelected)
  284. {
  285.  int num=0;
  286.  char * ptchaine=CycleDataPtr[num];
  287.  if (NumCycleSelected>0)
  288.  {
  289.   do
  290.   {
  291.    num++;
  292.    ptchaine=CycleDataPtr[num];
  293.   }
  294.   while( (num<NumCycleSelected) && (*ptchaine!=0) );
  295.  }
  296.  return ptchaine;
  297. }
  298. #endif    
  299.  
  300.  
  301.  
  302. /* ----------------------------------------- */
  303. /* Lecture depuis le disque du fichier trace */
  304. /* ----------------------------------------- */
  305. long load_trace_fm_disk(char * Fichier,time_t StartHorodate,time_t EndHorodate)
  306. {
  307.  FILE * FTrace;
  308.  time_t TimeSampleDiskBalayage;
  309.  long i=0;
  310.  time_t * Horodates;
  311.  double * Valeurs;
  312.  if (TraceGraph.Horodates==NULL)
  313.   Horodates=(time_t *)malloc(sizeof(time_t)*2500);
  314.  else
  315.   Horodates=TraceGraph.Horodates;
  316.  if (TraceGraph.Valeurs==NULL)
  317.   Valeurs=(double *)malloc(sizeof(double)*2500);
  318.  else
  319.   Valeurs=TraceGraph.Valeurs;
  320.  
  321.  if ( (Horodates==NULL) || (Valeurs==NULL) )
  322.   return(0);
  323.  TraceGraph.Horodates=Horodates;
  324.  TraceGraph.Valeurs=Valeurs;
  325.  FTrace=fopen(Fichier,"rb");
  326.  if (FTrace)
  327.  {
  328.   double ValSample;
  329.   int FinFic;
  330.   /* Recherche du 1er échantillon */
  331.   do
  332.   {
  333.    FinFic=fread(&TimeSampleDiskBalayage,sizeof(time_t),1,FTrace);
  334.    if (FinFic!=0)     
  335.     fread(&ValSample,sizeof(double),1,FTrace);
  336.   }
  337.   while( (FinFic!=0) && (TimeSampleDiskBalayage<StartHorodate) );
  338.   /* Remplissage de la mémoire avec les échantillons demandés */
  339.   if (FinFic!=0)
  340.   {
  341.    do
  342.    {
  343.     FinFic=fread(&TimeSampleDiskBalayage,sizeof(time_t),1,FTrace);
  344.     if (FinFic!=0)
  345.     {
  346.      Horodates[i]=TimeSampleDiskBalayage;
  347.      FinFic=fread(&ValSample,sizeof(double),1,FTrace);
  348.      if (FinFic!=0)
  349.      {
  350.       Valeurs[i]=ValSample;
  351.       if (TimeSampleDiskBalayage<EndHorodate)
  352.        i++;
  353.        if (i>=2500)
  354.        {
  355.         /* TEMPORAIRE a revoir */
  356.         printf("Memory Overflow... Partie chargement de trace\n");
  357.         exit(30);
  358.        }
  359.      }
  360.     }
  361.    }
  362.    while( (FinFic!=0) && (TimeSampleDiskBalayage<EndHorodate) );
  363.   }
  364.   fclose(FTrace);
  365.  }
  366.  return(i);
  367. }
  368.  
  369. /* ---------------------------------------------- */
  370. /* Libération de la mémoire utilisée par la trace */
  371. /* ---------------------------------------------- */
  372. void free_trace(time_t * Horodates[],double * Valeurs[])
  373. {
  374.  if (*Horodates)
  375.  {
  376.   free((void *)*Horodates);
  377.   *Horodates=NULL;
  378.  }
  379.  if (*Valeurs)
  380.  {
  381.   free((void *)*Valeurs);
  382.   *Valeurs=NULL;
  383.  }
  384. }
  385.  
  386. /* ----------------------------------------------- */
  387. /* Affichage de la trace sous forme numérique dans */
  388. /* le list-view                                    */
  389. /* ----------------------------------------------- */
  390. void show_trace_digital(int LibererMem,long NbrSmp,time_t TabHD[],double TabVal[])
  391. {
  392.  static struct AffiTraceNum * TraceAscii=NULL;
  393.  static long TailleMemTrace;
  394.  long i;
  395.  /* Quelque chose à afficher ? */
  396.  if (NbrSmp==0)
  397.  {
  398.   #ifdef GENERATE_GUI
  399.   DoMethod(App->ListTraceNum,MUIM_List_Clear);
  400.   #endif
  401.  }
  402.  else
  403.  {
  404.   /* Allocation mémoire */
  405.   /* si première fois ou plus d'échantillons à afficher que précédement */
  406.   if ( (NbrSmp!=TailleMemTrace) || (TraceAscii==NULL) )
  407.   {
  408.      if (TraceAscii)
  409.    {
  410.     free(TraceAscii);
  411.     TraceAscii=NULL;
  412.    }
  413.    if (TraceAscii==NULL)
  414.    {
  415.     TraceAscii=(struct AffiTraceNum *)malloc(sizeof(struct AffiTraceNum)*NbrSmp);
  416.     TailleMemTrace=NbrSmp;
  417.    }
  418.   }
  419.  
  420.   if (TraceAscii!=NULL)
  421.   {
  422.    /* Conversion en ascii pour affichage */
  423.    for(i=0;i<NbrSmp;i++)
  424.    {
  425.     convert_long_to_asciidate(TabHD[i],TraceAscii[i].Date,TraceAscii[i].Heure);
  426.     sprintf(TraceAscii[i].Valeur," %f",TabVal[i]);
  427.    }
  428.    /* Allez zouc, tout ça dans le list-view */
  429.    #ifdef GENERATE_GUI
  430.    set(App->ListTraceNum,MUIA_List_Quiet,TRUE);
  431.    DoMethod(App->ListTraceNum,MUIM_List_Clear);
  432.    for(i=0;i<NbrSmp;i++)
  433.    {
  434.     DoMethod(App->ListTraceNum,MUIM_List_InsertSingle,&TraceAscii[i],MUIV_List_Insert_Bottom);
  435.    }
  436.    set(App->ListTraceNum,MUIA_List_Quiet,FALSE);
  437.    set(App->ListTraceNum,MUIA_List_Active,MUIV_List_Active_Bottom);
  438.    #endif  
  439.   }
  440.  }
  441. }
  442.  
  443. /* Return the 32 bits value of time in locale !!! */
  444. time_t timenow(void)
  445. {
  446.  time_t t;
  447.  struct tm *p;
  448.  time(&t);  // en GMT...
  449.  p=localtime(&t);
  450.  return (mktime(p));
  451. }
  452.  
  453. /* ----------------------------------------------------------- */
  454. /* Conversion d'une valeur 32 bits en chaines ascii JJ/MM/AAAA */
  455. /* et HH:MM:SS si pointeur sur deuxième chaine non NULL        */
  456. /* ----------------------------------------------------------- */
  457. void convert_long_to_asciidate(time_t tps,char * ch,char * ch_time)
  458. {
  459.  struct tm *UnpackT;
  460.  
  461.  UnpackT = localtime(&tps);
  462.  sprintf(ch,"%02d/%02d/%04d",UnpackT->tm_mday,UnpackT->tm_mon+1,1900+UnpackT->tm_year);
  463.  if (ch_time)
  464.   sprintf(ch_time,"%02d:%02d:%02d",UnpackT->tm_hour,UnpackT->tm_min,UnpackT->tm_sec);
  465. }
  466. /* -------------------------------------------------------------- */
  467. /* Conversion de chaines ascii JJ/MM/AAAA et HH:MM:SS si deuxième */
  468. /* pointeur non NULL, en valeur 32 bits de temps                  */
  469. /* -------------------------------------------------------------- */
  470. time_t convert_asciidate_to_long(char * ch,char * ch_time)
  471. {
  472.  struct tm DateEnClair;
  473.  int Annee;
  474.  int Mois;
  475.  int Jour;
  476.  int Heure=0,Minute=0,Seconde=0;
  477.  int Offset=0;
  478.  int Valide=TRUE;
  479.  int ValideH;
  480.  time_t TimeRes=0;
  481.  /* LA DATE JJ/MM/AA */
  482.  /* Recherche du jour */
  483.  if ( (ch[Offset+1]=='/') || (ch[Offset+2]=='/') )
  484.  {
  485.   Jour=atoi(&ch[Offset]);
  486.   Offset=Offset+2;
  487.   if (ch[Offset]=='/')
  488.    Offset++;
  489.  }
  490.  else
  491.  {
  492.   Valide=FALSE;
  493.  }
  494.  /* Recherche du mois */
  495.  if ( (ch[Offset+1]=='/') || (ch[Offset+2]=='/') )
  496.  {
  497.   Mois=atoi(&ch[Offset]);
  498.   Offset=Offset+2;
  499.   if (ch[Offset]=='/')
  500.    Offset++;
  501.  }
  502.  else
  503.  {
  504.   Valide=FALSE;
  505.  }
  506.  /* Recherche de l'année */
  507.  if (Valide)
  508.  {
  509.   Annee = atoi(&ch[Offset]);
  510.   /* Année sur 2 chiffres ? */
  511.   if (ch[Offset+2]=='\0')
  512.   {
  513.    Annee = Annee+1900;
  514.   }
  515.   Annee = Annee - 1900;
  516.  }
  517.  
  518.  /* L'HORAIRE HH:MM:SS */
  519.  if (ch_time)
  520.     ValideH=TRUE;
  521.  if (ValideH)
  522.  {
  523.   Offset=0;
  524.   /* Recherche de l'heure */
  525.   if ( (ch_time[Offset+1]==':') || (ch_time[Offset+2]==':') )
  526.   {
  527.    Heure=atoi(&ch_time[Offset]);
  528.    Offset=Offset+2;
  529.    if (ch_time[Offset]==':')
  530.     Offset++;
  531.   }
  532.   else
  533.   {
  534.    ValideH=FALSE;
  535.   }
  536.   /* Recherche de la minute */
  537.   if ( (ch_time[Offset+1]==':') || (ch_time[Offset+2]==':') ||
  538.        (ch_time[Offset+2]=='\0') || (ch_time[Offset+2]=='\0') )
  539.   {
  540.    Minute=atoi(&ch_time[Offset]);
  541.    Offset=Offset+2;
  542.    if (ch_time[Offset]==':')
  543.     Offset++;
  544.   }
  545.   else
  546.   {
  547.    ValideH=FALSE;
  548.   }
  549.   /* Recherche des secondes (facultatif!) */
  550.   if (ValideH)
  551.   {
  552.     Seconde=atoi(&ch_time[Offset]);
  553.   }
  554.  }
  555.  
  556.  /* CALCUL DE LA VALEUR 32 BITS */
  557.  if (Valide)
  558.  {
  559.   DateEnClair.tm_year = Annee;
  560.   DateEnClair.tm_mon = Mois - 1;
  561.   DateEnClair.tm_mday = Jour;
  562.   DateEnClair.tm_isdst = 0; /*1;*/
  563.   if (ValideH)
  564.   {
  565.    DateEnClair.tm_hour = Heure;
  566.    DateEnClair.tm_min = Minute;
  567.    DateEnClair.tm_sec = Seconde;
  568.   }
  569.   else
  570.   {
  571.    DateEnClair.tm_hour = 0;
  572.    DateEnClair.tm_min = 0;
  573.    DateEnClair.tm_sec = 0;
  574.   }
  575.   TimeRes = mktime(&DateEnClair);
  576.  }
  577.  return TimeRes;
  578.  
  579. /* Affichage de la trace */
  580. void show_trace(int NumTrace,time_t StartT,time_t EndT)
  581. {
  582.   long NbrSamples;
  583. //    long i;
  584.   char FichierTrace[256];
  585.   sprintf(FichierTrace,"Sites/%s/Trace%03d",Teletrans.SiteName,NumTrace);
  586.   NbrSamples=load_trace_fm_disk(FichierTrace,StartT,EndT); /*,&TraHorodates,&TraValeurs);*/
  587.   TraceGraph.NbrSamples=NbrSamples;
  588.   show_trace_digital(FALSE,NbrSamples,TraceGraph.Horodates,TraceGraph.Valeurs);
  589. //     for (i=0;i<NbrSamples;i++)
  590. //     {
  591. //         printf("Sample #%d =>  Date:%s (time_t=%u) Valeur:%f\n",i,ctime(&TraHorodates[i]),TraHorodates[i],TraValeurs[i]);
  592. //     }
  593. }
  594.  
  595. #ifdef GENERATE_GUI
  596. void refresh_trace_wanted(int NumTraceDemande,long GlissementDates)
  597. {
  598.  int NumCycle;
  599.  int NumTrace;
  600.  char * DateDeb;
  601.  char * TempsDeb;
  602.  char * DateFin;
  603.  char * TempsFin;
  604.  time_t Tps32Deb,Tps32Fin;
  605.  /* n° de trace actuellement affichée ? */
  606.  get(App->ChoixTraces,MUIA_Cycle_Active,&NumCycle);
  607.  NumTrace=atoi(TabLibellesTraces[NumCycle]);
  608.  /* Trace demandée = sélectionnée ?*/
  609.  if ( (NumTraceDemande==NumTrace) || (NumTraceDemande==0) )
  610.  {
  611.   int RfshAffiDates=FALSE;
  612.   long TailleTps;
  613.   time_t TailleTps32;
  614.   time_t Tab[5]={24*3600,2*24*3600,7*24*3600,31*24*3600,0};
  615.   get(App->Trace_DateStart,MUIA_String_Contents,&DateDeb);
  616.   get(App->Trace_TimeStart,MUIA_String_Contents,&TempsDeb);
  617.   get(App->Trace_DateEnd,MUIA_String_Contents,&DateFin);
  618.   get(App->Trace_TimeEnd,MUIA_String_Contents,&TempsFin);
  619.   Tps32Deb=convert_asciidate_to_long(DateDeb,TempsDeb);
  620.   Tps32Fin=convert_asciidate_to_long(DateFin,TempsFin);
  621.   /* Taille de la plage temporelle affichée */
  622.   get(App->Trace_Range,MUIA_Cycle_Active,&TailleTps);
  623.   TailleTps32=Tab[TailleTps];
  624.   /* Demande de nouvelles dates de type 'Down' */
  625.   if (GlissementDates==ID_TRACE_RANGEDOWN)
  626.   {
  627.    time_t ZoneTpsAutre;
  628.    RfshAffiDates=TRUE;
  629.    if (TailleTps32!=0)
  630.    {
  631.     Tps32Fin=Tps32Deb;
  632.     Tps32Deb=Tps32Deb-TailleTps32;
  633.    }
  634.    else
  635.    {
  636.     ZoneTpsAutre=Tps32Fin-Tps32Deb;
  637.     Tps32Fin=Tps32Deb;
  638.     Tps32Deb=Tps32Deb-ZoneTpsAutre;
  639.    }
  640.   }
  641.   /* Demande de nouvelles dates de type 'Up' */
  642.   if (GlissementDates==ID_TRACE_RANGEUP)
  643.   {
  644.    time_t ZoneTpsAutre;
  645.    RfshAffiDates=TRUE;
  646.    if (TailleTps32!=0)
  647.    {
  648.     Tps32Deb=Tps32Fin;
  649.     Tps32Fin=Tps32Fin+TailleTps32;
  650.    }
  651.    else
  652.    {
  653.     ZoneTpsAutre=Tps32Fin-Tps32Deb;
  654.     Tps32Deb=Tps32Fin;
  655.     Tps32Fin=Tps32Fin+ZoneTpsAutre;
  656.    }
  657.   }
  658.   /* Demande de nouvelle plage temporelle, on recale le temps de fin */
  659.   /* -ou- Saisie d'une nouvelle date de début, on recale la fin */
  660.   if ( (GlissementDates==ID_TRACE_NEWRANGE) || (GlissementDates==ID_TRACE_START) )
  661.   {
  662.    if (TailleTps32!=0)
  663.    {
  664.     RfshAffiDates=TRUE;
  665.     Tps32Fin=Tps32Deb+TailleTps32;
  666.    }
  667.   }
  668.   /* Saisie d'une nouvelle date de fin, on recale le début */
  669.   if (GlissementDates==ID_TRACE_END)
  670.   {
  671.    if (TailleTps32!=0)
  672.    {
  673.     RfshAffiDates=TRUE;
  674.     Tps32Deb=Tps32Fin-TailleTps32;
  675.    }
  676.   }
  677.   /* Mise à jour des champs dates à l'écran */
  678.   if (RfshAffiDates)
  679.   {
  680.    char tmp[20];
  681.    char tmp2[10];
  682.    convert_long_to_asciidate(Tps32Deb,tmp,tmp2);
  683.    set(App->Trace_DateStart,MUIA_String_Contents,tmp);
  684.    set(App->Trace_TimeStart,MUIA_String_Contents,tmp2);
  685.    convert_long_to_asciidate(Tps32Fin,tmp,tmp2);
  686.    set(App->Trace_DateEnd,MUIA_String_Contents,tmp);
  687.    set(App->Trace_TimeEnd,MUIA_String_Contents,tmp2);
  688.    AffiGraphGene.Time32Deb=Tps32Deb;
  689.    AffiGraphGene.Time32Fin=Tps32Fin;
  690.   }
  691.   show_trace(NumTrace,Tps32Deb,Tps32Fin);
  692. //  DoMethod(App->GraphTrace,MUIM_Draw,MADF_DRAWOBJECT);
  693. //    MUI_Redraw(App->GraphTrace,MADF_DRAWOBJECT);
  694.   set(App->GraphTrace,SHOW_GRAPH,&TraceGraph);
  695.  }
  696. }
  697. #endif
  698.  
  699.  
  700.  
  701. /* ############################################################# */
  702. /* Choix d'un site, ou recherche du site avec lequel on vient de
  703.    se connecter sur le disque */
  704. /* ############################################################# */
  705. int SelectSite(void)
  706. {
  707.  struct FileLock * DirSite;
  708.  char DrawerNameSite[256];
  709.  FILE * PtrFileJrnlLoad;
  710.  FILE * PtrFileRessLoad;
  711.  FILE * PtrFileTraLoad;
  712.  char FileName[256];
  713.  int Fin;
  714.  int i;
  715.  char StringFile[256];
  716.  char * StrTraceOffset;
  717.   int ParamsOfSiteFnd=FALSE;
  718.   #ifndef GENERATE_GUI
  719.   printf("Nom du site:%s - Type:%s - Version:%s\n",Teletrans.SiteName,Teletrans.Type,Teletrans.Version);
  720.   #else
  721.   set(App->SiteName,MUIA_Text_Contents,Teletrans.SiteName);
  722.   set(App->Type,MUIA_Text_Contents,Teletrans.Type);
  723.   set(App->Version,MUIA_Text_Contents,Teletrans.Version);
  724.   set(App->NumTelephone,MUIA_String_Contents,Teletrans.NumTel);
  725.   #endif
  726.   /* Nettoyage Messages */
  727.   #ifdef GENERATE_GUI
  728.   set(App->MessageTextNum0,MUIA_String_Contents,"");
  729.   set(App->MessageTextNum1,MUIA_String_Contents,"");
  730.   set(App->MessageTextNum2,MUIA_String_Contents,"");
  731.   set(App->MessageTextNum3,MUIA_String_Contents,"");
  732.   set(App->MessageTextNum4,MUIA_String_Contents,"");
  733.   set(App->MessageTextNum5,MUIA_String_Contents,"");
  734.   set(App->MessageTextNum6,MUIA_String_Contents,"");
  735.   set(App->MessageTextNum7,MUIA_String_Contents,"");
  736.   #endif
  737.   /* Nettoyage Liste Journal et Liste Etats */
  738.   #ifdef GENERATE_GUI
  739.   DoMethod(App->ListJournal,MUIM_List_Clear);
  740.   DoMethod(App->ListEtats,MUIM_List_Clear);
  741.     set(App->ListEtats,MUIA_List_Quiet,TRUE);
  742.   #endif
  743.   /* Initialisation chaines Libellés/Etats des ressources */
  744.   i=0;
  745.   do
  746.   {
  747.    Ress[i].Libelle[0]='\0';
  748.    Ress[i].Etat[0]='\0';
  749.    #ifdef GENERATE_GUI
  750.    DoMethod(App->ListEtats ,MUIM_List_InsertSingle,&Ress[i],MUIV_List_Insert_Bottom);
  751.    #endif   
  752.    i++;
  753.   }
  754.   while(i<Teletrans.NumRessourcesMax);
  755.   #ifdef GENERATE_GUI
  756.   set(App->ListEtats,MUIA_List_Quiet,FALSE);
  757.   #endif
  758.   /* Initialisation du journal */
  759.   NumLastEven_Journal=-1;
  760.   DateLastEven_Journal[0]='\0';
  761.   JrnlTaille=0;
  762.   if (Jrnl)
  763.   {
  764.    free(Jrnl);
  765.    Jrnl=NULL;
  766.   }
  767.   /* On regarde sur le disque dur si on connait ce site ... */
  768.   strcpy(DrawerNameSite,"Sites/");
  769.   strcat(DrawerNameSite,Teletrans.SiteName);  
  770.   DirSite= (struct FileLock *)Lock(DrawerNameSite,ACCESS_READ);
  771.   if (DirSite!=NULL)
  772.   {
  773.    /* Site connu */
  774.    /*------------*/
  775.    UnLock((BPTR) DirSite);
  776.    /* Lecture des libellés des ressources sauvés sur le disque */
  777.    strcpy(FileName,"Sites/");
  778.    strcat(FileName,Teletrans.SiteName);
  779.    strcat(FileName,"/Ressources.txt");
  780.    PtrFileRessLoad=fopen(FileName,"rt");
  781.    if (PtrFileRessLoad!=NULL)
  782.    {
  783.     i=0;
  784.     do
  785.     {
  786.      Fin=(int)fgets(StringFile,255,PtrFileRessLoad);
  787.      if (Fin!=0)
  788.      {
  789.       strcpy_termnotnull(Ress[i].Libelle,StringFile,10,0);
  790.      }
  791.      i++;
  792.     }
  793.     while((Fin!=0)&&(i<NBR_RESSOURCES));
  794.     fclose(PtrFileRessLoad);
  795.     ParamsOfSiteFnd=TRUE;
  796.     #ifdef GENERATE_GUI
  797.     DoMethod(App->ListEtats,MUIM_List_Redraw,MUIV_List_Redraw_All);
  798.     #endif    
  799.    }
  800.  
  801.    /* Lecture du journal sauvé sur le disque */
  802.    strcpy(FileName,"Sites/");
  803.    strcat(FileName,Teletrans.SiteName);
  804.    strcat(FileName,"/Journal.txt");
  805.    PtrFileJrnlLoad=fopen(FileName,"rt");
  806.    if (PtrFileJrnlLoad!=NULL)
  807.    {
  808.     #ifdef GENERATE_GUI
  809.     set(App->ListJournal,MUIA_List_Quiet,TRUE);
  810.     #endif
  811.     do
  812.     {
  813.      Fin=(int)fgets(StringFile,255,PtrFileJrnlLoad);
  814.      if (Fin!=0)
  815.      {
  816.       NumLastEven_Journal=atol(StringFile);
  817.       strcpy_termnotnull(DateLastEven_Journal,StringFile+5,9,0);
  818.       AddEvenInJrnl(StringFile,FALSE);
  819.      }
  820.     }
  821.     while(Fin!=0);
  822.     fclose(PtrFileJrnlLoad);
  823.     #ifdef GENERATE_GUI
  824.     set(App->ListJournal,MUIA_List_Quiet,FALSE);
  825.     #endif
  826.    }
  827.  
  828.    /* Lecture du paramétrage des traces sauvé sur le disque */
  829.    strcpy(FileName,"Sites/");
  830.    strcat(FileName,Teletrans.SiteName);
  831.    strcat(FileName,"/Traces.txt");
  832.    PtrFileTraLoad=fopen(FileName,"rt");
  833.    if (PtrFileTraLoad!=NULL)
  834.    {
  835.     i=1;
  836.     do
  837.     {
  838.      Fin=(int)fgets(StringFile,255,PtrFileTraLoad);
  839.      if (Fin!=0)
  840.      {
  841.       if(strlen(StringFile)>1)
  842.       {
  843.        Tra[i].Used='M';
  844.        strcpy_termnotnull(Tra[i].NumMenu,StringFile,9,0);
  845.        Tra[i].NumMenu[3]=' ';
  846.        Tra[i].NumMenu[4]='-';
  847.        Tra[i].NumMenu[5]=' ';
  848.        StrTraceOffset=str_field(StringFile,128,10,'\t');
  849.        if (StrTraceOffset)
  850.        {
  851.         strcpy_termnotnull(Tra[i].Libelle,StrTraceOffset,'\n','\t');
  852.        }
  853.       }
  854.       else
  855.       {
  856.        Tra[i].Used='A';
  857.       }
  858.      }
  859.      i++;
  860.     }
  861.     while((Fin!=0)&&(i<NBR_TRACES));
  862.     fclose(PtrFileTraLoad);
  863.     #ifdef GENERATE_GUI
  864.     UpdateMUICycleTraces();
  865.     refresh_trace_wanted(0,NULL); // Refresh de la trace sélectionnée
  866.     #endif
  867.    }
  868.    else
  869.    {
  870.     ParamsOfSiteFnd=FALSE;
  871.    }
  872.   }
  873.   return ParamsOfSiteFnd;
  874. }
  875.  
  876.  
  877. #ifdef GENERATE_GUI
  878. void ChoixSiteConnu(void)
  879. {
  880.  long NumSiteChoisi;
  881.  char * NomSite=ListeSitesConnus;
  882.  int i;
  883.  char FileName[256];
  884.  char tmp[50];
  885.  get(App->ListSavedSites,MUIA_List_Active,&NumSiteChoisi); 
  886.  // On cherche la chaine correspondante
  887.  if (ListeSitesConnus)
  888.  {
  889.   for(i=0;i<NumSiteChoisi;i++)
  890.   {
  891.    do
  892.    {
  893.     NomSite++;
  894.    }
  895.    while(*NomSite!='\0');
  896.    NomSite++;
  897.   }
  898.   strcpy(Teletrans.SiteName,NomSite);
  899.  
  900.   strcpy(FileName,"Sites/");
  901.   strcat(FileName,Teletrans.SiteName);
  902.   strcat(FileName,"/InfosSite.txt");
  903.  
  904.   ReadStringParamIni("TYPE","???",Teletrans.Type,FileName);
  905.   ReadStringParamIni("VERSION","???",Teletrans.Version,FileName);
  906.   ReadStringParamIni("TRSII_EXTENDED","FALSE",tmp,FileName);
  907.   if (strcmp(tmp,"FALSE")==0)
  908.    Teletrans.TRSII_Extended_Clip=FALSE;
  909.   else
  910.    Teletrans.TRSII_Extended_Clip=TRUE;
  911.   Teletrans.NumRessourcesMax=ReadIntParamIni("RESSOURCES_NBR",100,FileName);
  912.   Teletrans.NumTracesMax=ReadIntParamIni("TRACES_NBR",20,FileName);
  913.   ReadStringParamIni("TELEPHONE","",Teletrans.NumTel,FileName);
  914.   SelectSite();
  915.  }
  916. }
  917. #endif
  918.  
  919. #ifdef GENERATE_GUI
  920. /* ######################################################
  921.    Mise à jour de la fenêtre contenant la liste des sites
  922.    déjà appelés et sauvegardés sur le disque
  923.    ###################################################### */
  924. void MiseAJourListeSitesConnus(void)
  925. {
  926.  BPTR DirLock;
  927.  struct FileInfoBlock FileInfo;
  928.  char PasLaFin=TRUE;
  929.  char SiteTmp[200];
  930.  long LgtSites=0;
  931.  int NbrSites=0;
  932.  int SiteActuel=-1;
  933.  int i;
  934.  if (ListeSitesConnus!=NULL)
  935.  {
  936.   free(ListeSitesConnus);
  937.   ListeSitesConnus=NULL;
  938.  }
  939.  DirLock=Lock("Sites",ACCESS_READ);
  940.  if(DirLock)
  941.  {
  942.   PasLaFin=Examine(DirLock,&FileInfo);
  943.   if (PasLaFin)
  944.   {
  945.    do
  946.    {
  947.     PasLaFin=ExNext(DirLock,&FileInfo);
  948.     if (PasLaFin)
  949.     {
  950.      if (FileInfo.fib_DirEntryType>0) // c'est un répertoire ?
  951.      {
  952.       strcpy(SiteTmp,FileInfo.fib_FileName);
  953.       if (strcmp(Teletrans.SiteName,SiteTmp)==0)
  954.        SiteActuel=NbrSites;
  955.       NbrSites++;
  956.       // On est obligé de conserver les chaines en mémoire car MUI utilise un pointeur
  957.       // sur la chaine passée en argument lors du DoMethod...
  958.       if (ListeSitesConnus)
  959.       {
  960.        ListeSitesConnus=realloc(ListeSitesConnus,LgtSites+strlen(SiteTmp)+1);
  961.       }
  962.       else
  963.       {
  964.        ListeSitesConnus=malloc(strlen(SiteTmp)+1);
  965.        ListeSitesConnus[0]=0;
  966.       }
  967.       if (ListeSitesConnus)
  968.       {
  969.        strcpy(ListeSitesConnus+LgtSites,SiteTmp);
  970.        LgtSites=LgtSites+strlen(SiteTmp)+1;
  971.       }      
  972.      }
  973.     }
  974.    }
  975.    while(PasLaFin);
  976.   }
  977.   UnLock(DirLock);
  978.  }
  979.  DoMethod(App->ListSavedSites,MUIM_List_Clear);
  980.  // On est obligé de le faire maintenant et on ne peux pas le faire au fur et à mesure
  981.  // car les realloc empechent d'avoir les pointeurs sur les chaînes de stables...
  982.  if (NbrSites)
  983.  {
  984.   char * NomSite=ListeSitesConnus;
  985.   for (i=0;i<NbrSites;i++)
  986.   {
  987.    DoMethod(App->ListSavedSites,MUIM_List_InsertSingle,NomSite,MUIV_List_Insert_Bottom);
  988.    do
  989.    {
  990.     NomSite++;
  991.    }
  992.    while(*NomSite!='\0');
  993.    NomSite++;
  994.   }
  995.   if (SiteActuel!=-1)
  996.    set(App->ListSavedSites,MUIA_List_Active,SiteActuel);
  997.  } 
  998. }
  999. #endif
  1000.  
  1001. /* ############################### */
  1002. /* # GESTION DU RAFRAICHISSEMENT # */
  1003. /* # SUITE AUX DONNES RECUES     # */
  1004. /* ############################### */
  1005. void gestion_refresh(char * EndOfStep,char * ParamFoundOnDisk,char FirstPassageInStep)
  1006. {
  1007.  struct FileLock * DirSite;
  1008.  char DrawerNameSite[256];
  1009.  FILE * PtrFileJrnlSave;
  1010.  FILE * PtrFileRessSave;
  1011.  FILE * PtrFileTraSave;
  1012.  char FileName[300];
  1013.  char NumEvenStr[16];
  1014.  char tmp[50];
  1015.  
  1016.  if (RefreshType==RFH_IDENTITE)
  1017.  {
  1018.   int Fnd;
  1019.   Fnd=SelectSite();
  1020.   *ParamFoundOnDisk=Fnd;
  1021.   if (!Fnd) 
  1022.   {
  1023.    /* Nouveau site */
  1024.    /*--------------*/
  1025.    strcpy(DrawerNameSite,"Sites/");
  1026.    strcat(DrawerNameSite,Teletrans.SiteName);  
  1027.    DirSite=(struct FileLock *)CreateDir(DrawerNameSite);
  1028.    if (DirSite!=NULL)
  1029.    {
  1030.     UnLock((BPTR) DirSite);
  1031.     /* Sauvegarde des infos concernant le site */
  1032.     WriteStringParamIni("TYPE",Teletrans.Type,"T:ClipWatchCurrentSite");
  1033.     WriteStringParamIni("VERSION",Teletrans.Version,"T:ClipWatchCurrentSite");
  1034.     if (Teletrans.TRSII_Extended_Clip==FALSE)
  1035.      strcpy(tmp,"FALSE");
  1036.     else
  1037.      strcpy(tmp,"TRUE");
  1038.     WriteStringParamIni("TRSII_EXTENDED",tmp,"T:ClipWatchCurrentSite");
  1039.     WriteIntParamIni("RESSOURCES_NBR",Teletrans.NumRessourcesMax,"T:ClipWatchCurrentSite");
  1040.     WriteIntParamIni("TRACES_NBR",Teletrans.NumTracesMax,"T:ClipWatchCurrentSite");    
  1041.     WriteStringParamIni("TELEPHONE",Teletrans.NumTel,"T:ClipWatchCurrentSite");
  1042.     strcpy(FileName,"copy T:ClipWatchCurrentSite \"Sites/");
  1043.     strcat(FileName,Teletrans.SiteName);
  1044.     strcat(FileName,"/InfosSite.txt\"");
  1045.     system(FileName);
  1046.     remove("T:ClipWatchCurrentSite");
  1047.     /* On met à jour la liste des sites connus */
  1048.     #ifdef GENERATE_GUI
  1049.     MiseAJourListeSitesConnus();
  1050.     #endif
  1051.    }
  1052.    else
  1053.    {
  1054.     ErrorMessageRequest("Nouveau site impossible à créer");
  1055.    }
  1056.   }
  1057.  }
  1058.  
  1059.  if (RefreshType==RFH_DATE)
  1060.  {
  1061.   #ifndef GENERATE_GUI
  1062.   printf("Date locale:%s\n",Teletrans.LocalDate);
  1063.   #else
  1064.   set(App->Date,MUIA_Text_Contents,Teletrans.LocalDate);
  1065.   #endif
  1066.  }
  1067.  
  1068.  if (RefreshType==RFH_TIME)
  1069.  {
  1070.   #ifndef GENERATE_GUI
  1071.   printf("Heure locale:%s\n",Teletrans.LocalTime);
  1072.   #else
  1073.   set(App->Time,MUIA_Text_Contents,Teletrans.LocalTime);
  1074.   #endif
  1075.  }
  1076.  
  1077.  if (RefreshType==RFH_JOURNAL)
  1078.  {
  1079.   /* Plus d'événement ? */
  1080.   if (strcmp(Even_Journal,"FIN")==0)
  1081.   {
  1082.    *EndOfStep=TRUE;
  1083.   }
  1084.   else
  1085.   {
  1086.    strcpy_termnotnull(NumEvenStr,Even_Journal,13,9);
  1087.    /* Lors de la première lecture via la date, il faut vérifier qu'il s'agit
  1088.       bien d'un événement inconnu */
  1089.    if ( (!FirstPassageInStep) || (NumLastEven_Journal!=atol(NumEvenStr)) )
  1090.    {
  1091.     #ifndef GENERATE_GUI
  1092.     printf("%s\n",Even_Journal);
  1093.     #else
  1094.     AddEvenInJrnl(Even_Journal,TRUE);
  1095.     #endif
  1096.     /* Sauvegarde sur le disque de l'événement */
  1097.     strcpy(FileName,"Sites/");
  1098.     strcat(FileName,Teletrans.SiteName);
  1099.     strcat(FileName,"/Journal.txt");
  1100.     PtrFileJrnlSave=fopen(FileName,"at");
  1101.     if (PtrFileJrnlSave!=NULL)
  1102.     {
  1103.      fprintf(PtrFileJrnlSave,"%s\n",Even_Journal);
  1104.      fclose(PtrFileJrnlSave);
  1105.     }
  1106.     else
  1107.     {
  1108.      ErrorMessageRequest("Sauvegarde journal impossible");
  1109.      *EndOfStep=TRUE;
  1110.     }
  1111.     NumLastEven_Journal=atol(NumEvenStr);
  1112.    }
  1113.   }
  1114.  } 
  1115.  
  1116.  if (RefreshType==RFH_LIBELLE_RESS)
  1117.  {
  1118.   strcpy(FileName,"Sites/");
  1119.   strcat(FileName,Teletrans.SiteName);
  1120.   strcat(FileName,"/Ressources.txt");
  1121.   #ifdef GENERATE_GUI
  1122.   DoMethod(App->ListEtats,MUIM_List_Redraw,RefreshParam);
  1123.   #endif
  1124.   /* Si première ressource, init.fichier sinon rajout */
  1125.   if (RefreshParam>0)
  1126.   {
  1127.    PtrFileRessSave=fopen(FileName,"at");
  1128.   }
  1129.   else
  1130.   {
  1131.    PtrFileRessSave=fopen(FileName,"wt");
  1132.   }
  1133.   if (PtrFileRessSave!=NULL)
  1134.   {
  1135.    fprintf(PtrFileRessSave,"%s\n",Ress[RefreshParam].Libelle);
  1136.    fclose(PtrFileRessSave);
  1137.   }
  1138.   else
  1139.   {
  1140.    if (RefreshParam==0)
  1141.    {
  1142.     ErrorMessageRequest("Sauvegarde libellés ressources impossible");
  1143.    }
  1144.   }
  1145.   /* Dernière ressource ? */
  1146.   if (RefreshParam==Teletrans.NumRessourcesMax-1)
  1147.   {
  1148.    *EndOfStep=TRUE;
  1149.   }
  1150.  }
  1151.  
  1152.  if (RefreshType==RFH_PARAM_TRACE)
  1153.  {
  1154.   /* Plus de traces (dépassement capacité télétrans en nbr de traces) ? */
  1155.   if (RefreshParam==0)
  1156.   {
  1157.    *EndOfStep=TRUE;
  1158.   }
  1159.   strcpy(FileName,"Sites/");
  1160.   strcat(FileName,Teletrans.SiteName);
  1161.   strcat(FileName,"/Traces.txt");
  1162.   /* Si première trace, init.fichier sinon rajout */
  1163.   if (RefreshParam>1)
  1164.   {
  1165.    PtrFileTraSave=fopen(FileName,"at");
  1166.   }
  1167.   else
  1168.   {
  1169.    PtrFileTraSave=fopen(FileName,"wt");
  1170.   }
  1171.   if (PtrFileTraSave!=NULL)
  1172.   {
  1173.    fprintf(PtrFileTraSave,"%s\n",Param_Trace);
  1174.    fclose(PtrFileTraSave);
  1175.   }
  1176.   else
  1177.   {
  1178.    if (RefreshParam==1)
  1179.    {
  1180.     ErrorMessageRequest("Sauvegarde paramétrage traces impossible");
  1181.    }
  1182.   }
  1183.   /* Dernière trace ? */
  1184.   if (RefreshParam==Teletrans.NumTracesMax-1)
  1185.   {
  1186.    /* Rafraichissement du gadget cyclique contenant tous les noms de traces */
  1187.    #ifdef GENERATE_GUI
  1188.    UpdateMUICycleTraces();
  1189.    #endif
  1190.    *EndOfStep=TRUE;
  1191.   }
  1192.  }
  1193.  
  1194.  if (RefreshType==RFH_ETAT_RESS)
  1195.  {
  1196.   #ifdef GENERATE_GUI
  1197.   DoMethod(App->ListEtats,MUIM_List_Redraw,RefreshParam);   
  1198.   #endif   
  1199.  }
  1200.  
  1201.  if (RefreshType==RFH_MESSAGEBOX)
  1202.  {
  1203.   #ifdef GENERATE_GUI
  1204.   switch(RefreshParam)
  1205.   {
  1206.    case 0:
  1207.     set(App->MessageTextNum0,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1208.     set(App->MessageTextNum0,MUIA_String_BufferPos,0);
  1209.     break;
  1210.    case 1:
  1211.     set(App->MessageTextNum1,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1212.     set(App->MessageTextNum1,MUIA_String_BufferPos,0);
  1213.     break;
  1214.    case 2:
  1215.     set(App->MessageTextNum2,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1216.     set(App->MessageTextNum2,MUIA_String_BufferPos,0);
  1217.     break;
  1218.    case 3:
  1219.     set(App->MessageTextNum3,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1220.     set(App->MessageTextNum3,MUIA_String_BufferPos,0);
  1221.     break;
  1222.    case 4:
  1223.     set(App->MessageTextNum4,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1224.     set(App->MessageTextNum4,MUIA_String_BufferPos,0);
  1225.     break;
  1226.    case 5:
  1227.     set(App->MessageTextNum5,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1228.     set(App->MessageTextNum5,MUIA_String_BufferPos,0);
  1229.     break;
  1230.    case 6:
  1231.     set(App->MessageTextNum6,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1232.     set(App->MessageTextNum6,MUIA_String_BufferPos,0);
  1233.     break;
  1234.    case 7:
  1235.     set(App->MessageTextNum7,MUIA_String_Contents,MessagesBox[RefreshParam]);
  1236.     set(App->MessageTextNum7,MUIA_String_BufferPos,0);
  1237.     break;
  1238.   }
  1239.   #else
  1240.   printf("Message n°%d => %s\n",RefreshParam,MessagesBox[RefreshParam]);
  1241.   #endif   
  1242.   /* Dernière boite aux lettres ? */
  1243.   if (RefreshParam==NBR_MESSAGESBOX-1)
  1244.   {
  1245.    *EndOfStep=TRUE;
  1246.   }
  1247.  }
  1248.  
  1249.  if (RefreshType==RFH_TRACE)
  1250.  {
  1251.   /* Plus de traces (dépassement capacité télétrans en nbr de traces)? */
  1252.   if (RefreshParam==0)
  1253.   {
  1254.    *EndOfStep=TRUE;
  1255.   }
  1256.   else
  1257.   {
  1258.   #ifdef GENERATE_GUI
  1259.    refresh_trace_wanted(RefreshParam,NULL);
  1260.   #endif
  1261.   }   
  1262.  }
  1263.  
  1264.  RefreshType=0;
  1265. }
  1266.  
  1267. /* ######################################### */
  1268. /* # GESTION DU DIALOGUE AVEC LA TELETRANS # */
  1269. /* ######################################### */
  1270. void gestion_dialogue(int NewConnexion)
  1271. {
  1272.  static int Step=0;
  1273.  static char StepFirstPassage=TRUE;
  1274.  static char StepDone=FALSE;
  1275.  static char WaitingResponse=FALSE;
  1276.  static char ParamSiteSaved=FALSE;
  1277.  static char CurrentRequest[64];
  1278.  static int CurrentRequestLgt;
  1279.  static int LgtTrameRecue;
  1280.  static unsigned long LaunchTime;
  1281.  static int BaseTimeOut;
  1282.  int TrameReponseOk;
  1283.  static int CurrentAttemps;
  1284.  static int NumRessALire;
  1285.  char NumRessALireStr[16];
  1286.  static char FirstJournalLoading=TRUE;
  1287.  
  1288.  char NumEvenStr[16];
  1289.  
  1290.  if (NewConnexion)
  1291.  {
  1292.   Step=0;
  1293.   StepFirstPassage=TRUE;
  1294.   StepDone=FALSE;
  1295.   WaitingResponse=FALSE;
  1296.   ParamSiteSaved=FALSE;
  1297.   FirstJournalLoading=TRUE;
  1298.  }
  1299.  
  1300.  if ( (WaitingResponse) || (StepDone) )
  1301.  {
  1302.   /* On attend la réponse ... */
  1303.   if (WaitingResponse)
  1304.   {
  1305.    TrameReponseOk=receive_request_trsii(CurrentRequest,CurrentRequestLgt,&LaunchTime,&CurrentAttemps,TrameRecue,&LgtTrameRecue,BaseTimeOut);
  1306.    if (TrameReponseOk==TRUE)
  1307.    {
  1308.     WaitingResponse=FALSE;
  1309.     gestion_refresh(&StepDone,&ParamSiteSaved,StepFirstPassage);
  1310.     StepFirstPassage=FALSE;
  1311.    }
  1312.   }
  1313.   /* Etape Terminée ? => Nouvelle étape */
  1314.   if ( (StepDone)&&(!(WaitingResponse)) )
  1315.   {
  1316.    Step++;
  1317.    StepFirstPassage=TRUE;
  1318.    StepDone=FALSE;
  1319.    /* Pas de lecture des libellés des ressources / du paramétrage des traces */
  1320.    /* si sauvés sur disque */
  1321.    if ( ((Step==3)||(Step==4)) && (ParamSiteSaved==TRUE) )
  1322.    {
  1323.     Step=5;
  1324.    }
  1325.    /* Pas de récupération des messages si pas choisi dans préférences */
  1326.    if ( (Step==5) && (!(RecupDesMessages)) )
  1327.    {
  1328.     Step++;
  1329.    }
  1330.    /* On ne peut pas récupérer le journal avec un Force + choix dans préférences */
  1331.    if ( (Step==8) && ( (Teletrans.TRSII_Extended_Clip==FALSE)||(!(RecupDuJournal)) )  )
  1332.    {
  1333.     Step++;
  1334.    } 
  1335.    /* On ne récupère pas les traces avec un Force */
  1336.    if ( (Step==10) && (!RecupDesTraces||(Teletrans.TRSII_Extended_Clip==FALSE)) )
  1337.    {
  1338.     Step++;
  1339.    } 
  1340.    if (Step==11)
  1341.    {
  1342.     #ifndef GENERATE_GUI
  1343.     for(NumRessALire=0;NumRessALire<20;NumRessALire++)
  1344.     {
  1345.      printf("Ress:%d => %s \t %s\n",NumRessALire,Ress[NumRessALire].Libelle,Ress[NumRessALire].Etat);
  1346.     }
  1347.     printf("Raccroche...\n");
  1348.     hangup_modem();
  1349.     TeletransOnLine=FALSE;
  1350.     #else
  1351.     Step=7;
  1352.     #endif
  1353.    }
  1354.   }
  1355.  }
  1356.  else
  1357.  {
  1358.   /* On pose une nouvelle question ! */  
  1359.   switch(Step)
  1360.   {
  1361.    case 0:
  1362.     /* FORCAGE MODE TRSII */
  1363.     /* ------------------ */
  1364.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"OTHER","W06","",&LaunchTime,&BaseTimeOut);
  1365.     Delay(20);
  1366.     Step++;
  1367.     break;
  1368.  
  1369.    case 1:
  1370.     /* PASSAGE CODE D'ACCES */
  1371.     /* -------------------- */
  1372.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"ACCES",Teletrans.Password,"",&LaunchTime,&BaseTimeOut);
  1373.     CurrentAttemps=3;
  1374.     LgtTrameRecue=0;
  1375.     WaitingResponse=TRUE;
  1376.     StepDone=TRUE;
  1377.     break;
  1378.  
  1379.    case 2:
  1380.     /* DEMANDE IDENTITE STATION */
  1381.     /* ------------------------ */
  1382.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"IDENT?","","",&LaunchTime,&BaseTimeOut);
  1383.     CurrentAttemps=3;
  1384.     LgtTrameRecue=0;
  1385.     WaitingResponse=TRUE;
  1386.     StepDone=TRUE;
  1387.     break;
  1388.  
  1389.    case 3:
  1390.     /* LECTURE LIBELLES RESSOURCES */
  1391.     /* --------------------------- */
  1392.     if (StepFirstPassage==TRUE)
  1393.     {
  1394.      NumRessALire=0;
  1395.     }
  1396.     else
  1397.     {
  1398.      NumRessALire++;
  1399.     }
  1400.     sprintf(NumRessALireStr,"%0d",NumRessALire);
  1401.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"RESS?",NumRessALireStr,"",&LaunchTime,&BaseTimeOut);
  1402.     CurrentAttemps=3;
  1403.     LgtTrameRecue=0;
  1404.     WaitingResponse=TRUE;
  1405.     break;
  1406.  
  1407.    case 4:
  1408.     /* LECTURE PARAMETRAGE TRACES */
  1409.     /* -------------------------- */
  1410.     if (StepFirstPassage==TRUE)
  1411.     {
  1412.      NumRessALire=1;
  1413.     }
  1414.     else
  1415.     {
  1416.      NumRessALire++;
  1417.     }
  1418.     sprintf(NumRessALireStr,"%0d",NumRessALire);
  1419.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"TP?",NumRessALireStr,"",&LaunchTime,&BaseTimeOut);
  1420.     CurrentAttemps=3;
  1421.     LgtTrameRecue=0;
  1422.     WaitingResponse=TRUE;
  1423.     break;
  1424.  
  1425.    case 5:
  1426.     /* LECTURE DES MESSAGES DE LA BOITE */
  1427.     /* -------------------------------- */
  1428.     if (StepFirstPassage==TRUE)
  1429.     {
  1430.      NumRessALire=0;
  1431.     }
  1432.     else
  1433.     {
  1434.      NumRessALire++;
  1435.     }
  1436.     sprintf(NumRessALireStr,"%0d",NumRessALire);
  1437.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"MESS?",NumRessALireStr,"",&LaunchTime,&BaseTimeOut);
  1438.     CurrentAttemps=3;
  1439.     LgtTrameRecue=0;
  1440.     WaitingResponse=TRUE;
  1441.     break;
  1442.  
  1443.    case 6:
  1444.     /* DEMANDE DATE LOCALE */
  1445.     /* ------------------- */
  1446.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"DATE?","","",&LaunchTime,&BaseTimeOut);
  1447.     CurrentAttemps=3;
  1448.     LgtTrameRecue=0;
  1449.     WaitingResponse=TRUE;
  1450.     StepDone=TRUE;
  1451.     break;
  1452.  
  1453.    case 7:
  1454.     /* DEMANDE HEURE LOCALE */
  1455.     /* ------------------- */
  1456.     send_request_trsii(CurrentRequest,&CurrentRequestLgt,"TIME?","","",&LaunchTime,&BaseTimeOut);
  1457.     CurrentAttemps=3;
  1458.     LgtTrameRecue=0;
  1459.     WaitingResponse=TRUE;
  1460.     StepDone=TRUE;
  1461.     break;
  1462.  
  1463.    case 8:
  1464.     /* LECTURE DU JOURNAL */
  1465.     /* ------------------ */
  1466.     /* On ne connait aucun événement ? */
  1467.     if (NumLastEven_Journal==-1)
  1468.     {
  1469.      send_request_trsii(CurrentRequest,&CurrentRequestLgt,"J?","","",&LaunchTime,&BaseTimeOut);
  1470.     }
  1471.     else
  1472.     {
  1473.      if (FirstJournalLoading)
  1474.      {
  1475.       /* On veut l'événement suivant la date du dernier événement connu */
  1476.       /* On reçoit un "Token incorrect" si jamais il y a un trou dans les index */
  1477.       /* d'événements en passant par la commande J? #index */
  1478.       send_request_trsii(CurrentRequest,&CurrentRequestLgt,"J?",DateLastEven_Journal,"",&LaunchTime,&BaseTimeOut);
  1479.       FirstJournalLoading=FALSE;
  1480.      }
  1481.      else
  1482.      {
  1483.       /* On veux l'événement suivant LastNumEven */
  1484.       /* Attention, numéro d'événement sur 4 caractères!!! */
  1485.       NumEvenStr[0]='#';
  1486.       RealToStrWithZeros(NumEvenStr+1,4,NumLastEven_Journal);
  1487.       send_request_trsii(CurrentRequest,&CurrentRequestLgt,"J?",NumEvenStr,"",&LaunchTime,&BaseTimeOut);
  1488.      }
  1489.     }
  1490.     CurrentAttemps=3;
  1491.     LgtTrameRecue=0;
  1492.     WaitingResponse=TRUE;
  1493.     break;
  1494.  
  1495.    case 9:
  1496.     /* LECTURE ETATS DES RESSOURCES */
  1497.     /* ---------------------------- */
  1498.     if (StepFirstPassage==TRUE)
  1499.     {
  1500.      NumRessALire=-1;
  1501.     }
  1502.     do
  1503.     {
  1504.      NumRessALire++;
  1505.     }
  1506.     while( (Ress[NumRessALire].Libelle[0]=='\0') && (NumRessALire<(Teletrans.NumRessourcesMax-1)) );
  1507.     if (NumRessALire<Teletrans.NumRessourcesMax)
  1508.     {
  1509.      sprintf(NumRessALireStr,"%0d",NumRessALire);
  1510.      send_request_trsii(CurrentRequest,&CurrentRequestLgt,"ETAT?",NumRessALireStr,"",&LaunchTime,&BaseTimeOut);
  1511.      CurrentAttemps=3;
  1512.      LgtTrameRecue=0;
  1513.      WaitingResponse=TRUE;
  1514.     }
  1515.     else
  1516.     {
  1517.      StepDone=TRUE;
  1518.     }
  1519.     break;
  1520.  
  1521.    case 10:
  1522.     /* LECTURE DES TRACES */
  1523.     /* ------------------- */
  1524.     if (StepFirstPassage==TRUE)
  1525.     {
  1526.      NumRessALire=0;
  1527.     }
  1528.     do
  1529.     {
  1530.      NumRessALire++;
  1531.     }
  1532.     while( (Tra[NumRessALire].Used!='M') && (NumRessALire<(Teletrans.NumTracesMax-1)) );
  1533.     if (NumRessALire<Teletrans.NumTracesMax-1)
  1534.     {
  1535.      sprintf(NumRessALireStr,"%0d",NumRessALire);
  1536.      send_request_trsii(CurrentRequest,&CurrentRequestLgt,"T?",NumRessALireStr,"",&LaunchTime,&BaseTimeOut);
  1537.      CurrentAttemps=3;
  1538.      LgtTrameRecue=0;
  1539.      WaitingResponse=TRUE;
  1540.     }
  1541.     else
  1542.     {
  1543.      StepDone=TRUE;
  1544.     }
  1545.     break;
  1546.  
  1547.  
  1548.   }
  1549.  }
  1550. }
  1551.  
  1552.  
  1553.  
  1554.  
  1555. /*-----------------------------*/
  1556. /*             MAIN            */
  1557. /*-----------------------------*/
  1558.  
  1559. int main(int argc, char *argv[])
  1560. {
  1561.  char Quitter=FALSE;
  1562.  #ifdef GENERATE_GUI
  1563.  ULONG    signal;
  1564.  char *StrContents;
  1565.  #endif
  1566.  char InitStringForModem[128]="";
  1567.  int Result;
  1568.  unsigned long StartTimeOfCnx=0;
  1569.  char TimeOfCnxString[10+50];
  1570.  int TimeOfCnx=0;
  1571.  int TimeOfCnx_bak=0;
  1572.  char tmp[50];
  1573.  char tmp2[50];
  1574.  char * AboutMsg;
  1575.  char SignalConnexion=FALSE;
  1576.  
  1577.  
  1578.  Mem_AllocAll();
  1579.  
  1580.  IntuitionBase = (struct Library *)OpenLibrary("intuition.library",37);
  1581.  if (!IntuitionBase)
  1582.   exit(5);
  1583.  GfxBase = (struct Library *)OpenLibrary("graphics.library",37);
  1584.  if (!GfxBase)
  1585.   exit(5);
  1586.  UtilityBase = (struct Library *)OpenLibrary("utility.library",37);
  1587.  if (!UtilityBase)
  1588.   exit(5);
  1589.  
  1590.  /* Lecture des préférences */
  1591.  ReadStringParamIni("DEVICE","serial.device",SerialDevice,"ENV:ClipWatch.prefs");
  1592.  SerialUnit=ReadIntParamIni("UNIT",0,"ENV:ClipWatch.prefs");
  1593.  SerialSpeed=ReadIntParamIni("SPEED",1200,"ENV:ClipWatch.prefs");
  1594.  ReadStringParamIni("INITSTRINGMODEM","",InitStringForModem,"ENV:ClipWatch.prefs");
  1595.  RecupDuJournal=ReadIntParamIni("GETLOG",TRUE,"ENV:ClipWatch.prefs");
  1596.  RecupDesMessages=ReadIntParamIni("GETMSG",TRUE,"ENV:ClipWatch.prefs");
  1597.  RecupDesTraces=ReadIntParamIni("GETTRA",TRUE,"ENV:ClipWatch.prefs");
  1598.  MoniteurActif=ReadIntParamIni("MONITOR",FALSE,"ENV:ClipWatch.prefs");
  1599.  MoniteurMode=ReadIntParamIni("MONITORTYPE",1,"ENV:ClipWatch.prefs");
  1600.  
  1601.  strcpy(Teletrans.SiteName,"");
  1602.  TraceGraph.Horodates=NULL;
  1603.  TraceGraph.Valeurs=NULL;
  1604.  TraceGraph.NbrSamples=0;
  1605.  
  1606.  #ifdef GENERATE_GUI
  1607.  init();
  1608.  if (!(mccgraph = MUI_CreateCustomClass(NULL,MUIC_Area,NULL,sizeof(struct GraphClassData),MyDispatcher)))
  1609.  {
  1610.   printf(NULL,"Could not create custom class.");
  1611.   Mem_FreeAll();
  1612.   exit(30);
  1613.  }
  1614.  App=CreateApp();
  1615.  
  1616.  /* Réglage par défaut pour la visualisation de la trace calé sur la date du jour */
  1617.  /* (j'ai vu le côté exploitation dans une entreprise...) */
  1618.  convert_long_to_asciidate(timenow()-23*3600,tmp,tmp2);
  1619.  set(App->Trace_DateStart,MUIA_String_Contents,tmp);
  1620.  set(App->Trace_TimeStart,MUIA_String_Contents,tmp2);
  1621.  AffiGraphGene.Time32Deb=timenow()-23*3600;
  1622.  convert_long_to_asciidate(timenow()+3600,tmp,tmp2);
  1623.  set(App->Trace_DateEnd,MUIA_String_Contents,tmp);
  1624.  set(App->Trace_TimeEnd,MUIA_String_Contents,tmp2);
  1625.  AffiGraphGene.Time32Fin=timenow()+3600;
  1626.  set(App->GraphTrace,SHOW_GRAPH,&TraceGraph);
  1627.  MiseAJourListeSitesConnus();
  1628.  #endif
  1629.  
  1630.  Serial_OpenAll();
  1631.  
  1632.  
  1633.  do
  1634.  {
  1635.  
  1636.   #ifndef GENERATE_GUI
  1637.  
  1638.   printf("N° de téléphone de la télétrans à appeler:");
  1639.   scanf("%s",Teletrans.NumTel);
  1640.   if (strcmp(Teletrans.NumTel,"x")==0)
  1641.   {
  1642.    Quitter = TRUE;
  1643.   }
  1644.   if (Quitter==FALSE)
  1645.   {
  1646.    printf("Mot de passe:");
  1647.    scanf("%s",Teletrans.Password);
  1648.    if ((SerialInitOk==TRUE)&&(strlen(Teletrans.NumTel)>0))
  1649.    {
  1650.         /* INIT.MODEM WITH INIT.STRING */
  1651.     /* --------------------------- */       
  1652.     DisplayStatus("Init.modem");
  1653.     if (init_modem(InitStringForModem)==FALSE)
  1654.     {
  1655.      ErrorMessageRequest("Init.modem failed");
  1656.     }
  1657.     else
  1658.     {
  1659.      int ResultCall;
  1660.  
  1661.      /* CALLING THE SITE AND ESTABLISHING THE LINE */
  1662.      /* ------------------------------------------ */
  1663.      DisplayStatus("Calling...");
  1664.      call_modem(Teletrans.NumTel,TRUE);
  1665.      do
  1666.      {
  1667.       ResultCall = call_modem(Teletrans.NumTel,FALSE);
  1668.       Delay(50);
  1669.      }
  1670.      while(ResultCall==FALSE);
  1671.      if (ResultCall!=TRUE)
  1672.      {
  1673.       hangup_modem();
  1674.       ErrorMessageRequest("Failed to connect");
  1675.      }
  1676.      else
  1677.      {
  1678.       TeletransOnLine=TRUE;
  1679.       gestion_dialogue(TRUE);
  1680.  
  1681.       do
  1682.       {
  1683.        gestion_dialogue(FALSE);
  1684.        Delay(3);
  1685.       }
  1686.       while(TeletransOnLine);
  1687.      }
  1688.     }
  1689.    }
  1690.    Delay(240);
  1691.    Quitter=TRUE;
  1692.   }
  1693.  
  1694.   #else
  1695.  
  1696.   switch (DoMethod(App->App,MUIM_Application_Input,&signal))
  1697.   {
  1698.    case MUIV_Application_ReturnID_Quit:
  1699.     Quitter = TRUE;
  1700.     break;
  1701.    case ID_MENU_ABOUT:
  1702.     AboutMsg=malloc(4000);
  1703.     if (AboutMsg)
  1704.     {
  1705.      sprintf(AboutMsg,"ClipWatch %s\nDernière révision:%s\n\nOutil pour appeler des télétransmissions Clip/Force (WIT)\n© 1999-2000 Marc Le Douarain\nmavati@club-internet.fr",VERSION,COMPILATION_DATE);
  1706.      MUI_Request(App->App, App->WI_Main, 0, NULL, "OK", AboutMsg);
  1707.      free(AboutMsg);
  1708.     }
  1709.     break;
  1710.    case ID_MENU_ABOUTMUI:
  1711.     if(!WI_AboutMUI)
  1712.     WI_AboutMUI=AboutmuiObject,MUIA_Window_RefWindow,App->WI_Main,MUIA_Aboutmui_Application,App->App,End;
  1713.     if(WI_AboutMUI)
  1714.       set(WI_AboutMUI,MUIA_Window_Open,TRUE);
  1715.     else
  1716.       DisplayBeep(0);
  1717.     break;
  1718.    case ID_PREFS_WINDOWOPENED:
  1719.    {
  1720.     char SpdTmp[50];
  1721.     char tmp[30];
  1722.     set(App->Prefs_InitStringModem,MUIA_String_Contents,InitStringForModem);
  1723.     set(App->Prefs_Device,MUIA_String_Contents,SerialDevice);
  1724.     sprintf(tmp,"%d",SerialUnit);
  1725.     set(App->Prefs_Unit,MUIA_String_Contents,tmp);
  1726.     sprintf(SpdTmp,"%d",SerialSpeed);
  1727.     set(App->Prefs_Vitesse,MUIA_Cycle_Active,GetMUICycleToSet(App->Prefs_VitesseContent,SpdTmp));
  1728.     set(App->Prefs_RecupJournal,MUIA_Selected,RecupDuJournal);
  1729.     set(App->Prefs_RecupMessages,MUIA_Selected,RecupDesMessages);
  1730.     set(App->Prefs_RecupTraces,MUIA_Selected,RecupDesTraces);
  1731.     set(App->Prefs_Monitor,MUIA_Selected,MoniteurActif);
  1732.     set(App->Prefs_Monitor_Type,MUIA_Cycle_Active,MoniteurMode-1);
  1733.     break;
  1734.    }
  1735.    case ID_PREFS_TOSAVE:
  1736.     /* Sauvegarde des préférences sur le disque dur */
  1737.      system("copy ENV:ClipWatch.prefs ENVARC:ClipWatch.prefs");
  1738.      break;
  1739.    case ID_PREFS_CHANGED:
  1740.    {
  1741.     long numcyc;
  1742.     char * txt;
  1743.     get(App->Prefs_InitStringModem,MUIA_String_Contents,&txt);
  1744.     strcpy(InitStringForModem,txt);
  1745.     get(App->Prefs_Device,MUIA_String_Contents,&txt);
  1746.     strcpy(SerialDevice,txt);
  1747.     get(App->Prefs_Unit,MUIA_String_Contents,&txt);
  1748.     SerialUnit=atoi(txt);
  1749.     get(App->Prefs_Vitesse,MUIA_Cycle_Active,&numcyc);
  1750.     SerialSpeed=atoi(GetMUICycleString(App->Prefs_VitesseContent,numcyc));
  1751.     get(App->Prefs_RecupJournal,MUIA_Selected,&RecupDuJournal);
  1752.     get(App->Prefs_RecupMessages,MUIA_Selected,&RecupDesMessages);
  1753.     get(App->Prefs_RecupTraces,MUIA_Selected,&RecupDesTraces);
  1754.     get(App->Prefs_Monitor,MUIA_Selected,&MoniteurActif);
  1755.     get(App->Prefs_Monitor_Type,MUIA_Cycle_Active,&MoniteurMode);
  1756.     MoniteurMode++;
  1757.     /* Sauvegarde des préférences en RAM */
  1758.     WriteStringParamIni("DEVICE",SerialDevice,"ENV:ClipWatch.prefs");
  1759.     WriteIntParamIni("UNIT",SerialUnit,"ENV:ClipWatch.prefs");
  1760.     WriteIntParamIni("SPEED",SerialSpeed,"ENV:ClipWatch.prefs");
  1761.     WriteStringParamIni("INITSTRINGMODEM",InitStringForModem,"ENV:ClipWatch.prefs");
  1762.     WriteIntParamIni("GETLOG",RecupDuJournal,"ENV:ClipWatch.prefs");
  1763.     WriteIntParamIni("GETMSG",RecupDesMessages,"ENV:ClipWatch.prefs");
  1764.     WriteIntParamIni("GETTRA",RecupDesTraces,"ENV:ClipWatch.prefs");
  1765.     WriteIntParamIni("MONITOR",MoniteurActif,"ENV:ClipWatch.prefs");
  1766.     WriteIntParamIni("MONITORTYPE",MoniteurMode,"ENV:ClipWatch.prefs");
  1767.     break;
  1768.    }
  1769.    case ID_MENU_PREFSMUI:
  1770.     DoMethod(App->App,MUIM_Application_OpenConfigWindow,0);
  1771.     break;
  1772.    case ID_SAVED_SITE_SELECTED:
  1773.     set(App->WI_SelectSite,MUIA_Window_Sleep,TRUE);
  1774.     ChoixSiteConnu();
  1775.     set(App->WI_SelectSite,MUIA_Window_Sleep,FALSE);
  1776.     break;
  1777.    case ID_BUTTON_DISCONNECT:
  1778.     if ((TeletransOnLine)||(TeletransOnCall))
  1779.     {
  1780.      DisplayStatus("Raccroche...");
  1781.      hangup_modem();
  1782.      TeletransOnLine=FALSE;
  1783.      TeletransOnCall=FALSE;
  1784.      SignalConnexion=FALSE;
  1785.      strcpy(TimeOfCnxString,"--:--");
  1786.      set(App->ComTime,MUIA_Text_Contents,TimeOfCnxString);
  1787.      DisplayStatus("Prêt...");
  1788.      set(App->SelectSiteSaved,MUIA_Disabled,FALSE);
  1789.     }
  1790.     break;
  1791.    case ID_BUTTON_CONNECT:
  1792.     get(App->NumTelephone,MUIA_String_Contents,&StrContents);
  1793.     strcpy(Teletrans.NumTel,StrContents);
  1794.     get(App->Password,MUIA_String_Contents,&StrContents);
  1795.     strcpy(Teletrans.Password,StrContents);
  1796.     if ((SerialInitOk==TRUE)&&(strlen(Teletrans.NumTel)>0)&&(strlen(Teletrans.Password)>0))
  1797.     {
  1798.      /* INIT.MODEM WITH INIT.STRING - bloquant */
  1799.      DisplayStatus("Init.modem");
  1800.      if (init_modem(InitStringForModem)==FALSE)
  1801.      {
  1802.       ErrorMessageRequest("Echec Init.modem");
  1803.      }
  1804.      else
  1805.      {
  1806.       /* CALLING THE SITE AND ESTABLISHING THE LINE - non bloquant */
  1807.       DisplayStatus("Appel...");
  1808.       TeletransOnCall=TRUE;
  1809.       call_modem(Teletrans.NumTel,TRUE);
  1810.      }
  1811.     }
  1812.     else
  1813.     {
  1814.      ErrorMessageRequest("Numéro de téléphone/Mot de passe incorrects!!!");
  1815.     }
  1816.     break;
  1817.    case ID_TRACE_REFRESH:
  1818.    {
  1819.     refresh_trace_wanted(0,NULL); // Refresh de la trace sélectionnée
  1820.     break;
  1821.    }
  1822.    case ID_TRACE_START:
  1823.    {
  1824.     refresh_trace_wanted(0,ID_TRACE_START); // Refresh de la trace sélectionnée
  1825.     break;
  1826.    }
  1827.    case ID_TRACE_END:
  1828.    {
  1829.     refresh_trace_wanted(0,ID_TRACE_END); // Refresh de la trace sélectionnée
  1830.     break;
  1831.    }
  1832.    case ID_TRACE_RANGEDOWN:
  1833.    {
  1834.     refresh_trace_wanted(0,ID_TRACE_RANGEDOWN); // Refresh de la trace sélectionnée
  1835.     break;
  1836.    }
  1837.    case ID_TRACE_RANGEUP:
  1838.    {
  1839.     refresh_trace_wanted(0,ID_TRACE_RANGEUP); // Refresh de la trace sélectionnée
  1840.     break;
  1841.    }
  1842.    case ID_TRACE_NEWRANGE:
  1843.    {
  1844.     refresh_trace_wanted(0,ID_TRACE_NEWRANGE); // Refresh de la trace sélectionnée
  1845.     break;
  1846.    }
  1847.   }
  1848.   /* Gestion communication en cours */
  1849.   if (TeletransOnLine)
  1850.   {
  1851.    gestion_dialogue(FALSE);
  1852.    /* Le petit compteur du temps */
  1853.    TimeOfCnx=get_timer_secs()-StartTimeOfCnx;
  1854.    if (TimeOfCnx!=TimeOfCnx_bak)
  1855.    {
  1856.     sprintf(TimeOfCnxString,"%d:%2d",TimeOfCnx/60,TimeOfCnx%60);
  1857.     set(App->ComTime,MUIA_Text_Contents,TimeOfCnxString);
  1858.     TimeOfCnx_bak=TimeOfCnx;
  1859.    }
  1860.    if (!SignalConnexion)
  1861.     set(App->SelectSiteSaved,MUIA_Disabled,TRUE);
  1862.    SignalConnexion=TRUE;
  1863.   }
  1864.   /* On vient de se déconnecter suite à des erreurs... */
  1865.   if ( (TeletransOnLine==FALSE) && (SignalConnexion==TRUE) )
  1866.   {
  1867.    ErrorMessageRequest("Perte de connexion avec le site...");
  1868.    strcpy(TimeOfCnxString,"--:--");
  1869.    set(App->ComTime,MUIA_Text_Contents,TimeOfCnxString);
  1870.    DisplayStatus("Prêt...");
  1871.    set(App->SelectSiteSaved,MUIA_Disabled,FALSE);
  1872.    SignalConnexion=FALSE;
  1873.   }
  1874.   /* Gestion de l'appel en cours */
  1875.   if (TeletransOnCall)
  1876.   {
  1877.    Result=call_modem(Teletrans.NumTel,FALSE);
  1878.    if ( (Result!=FALSE) && (Result!=TRUE) )
  1879.    {
  1880.     hangup_modem();
  1881.     if (Result==3)
  1882.      ErrorMessageRequest("Ligne téléphonique du site occupée");
  1883.     else
  1884.      ErrorMessageRequest("Echec à l'appel");
  1885.     TeletransOnCall=FALSE;
  1886.    }
  1887.    if (Result==TRUE)
  1888.    {
  1889.     TeletransOnCall=FALSE;
  1890.     TeletransOnLine=TRUE;
  1891.     StartTimeOfCnx=get_timer_secs();
  1892.     gestion_dialogue(TRUE);
  1893.    }
  1894.   }
  1895. //  if (!(Quitter) && signal)
  1896. //    Wait(signal);
  1897.   Delay(3);
  1898.  
  1899.   #endif
  1900.  
  1901.  }
  1902.  while(Quitter==FALSE);
  1903.  Appli_CloseAll();
  1904.  #ifdef GENERATE_GUI
  1905.  if (App)
  1906.  {
  1907.   DisposeApp(App);
  1908.   MUI_DeleteCustomClass(mccgraph);
  1909.   CloseLibrary(MUIMasterBase);
  1910.  }
  1911.  
  1912.  #endif
  1913.  
  1914.  if (!IntuitionBase)
  1915.   CloseLibrary(IntuitionBase);
  1916.  if (!GfxBase)
  1917.   CloseLibrary(GfxBase);
  1918.  if (!UtilityBase)
  1919.   CloseLibrary(UtilityBase);
  1920.  Mem_FreeAll();
  1921.  free_trace(&TraceGraph.Horodates,&TraceGraph.Valeurs);
  1922.  exit(0);
  1923. }
  1924.